`:top
`!Co-array Fortran`! (CAF), ehemals `!F--`!, ist eine Erweiterung der `F33f`_`[Programmiersprache`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Programmiersprache]`_`f `F33f`_`[Fortran`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Fortran]`_`f 95/2003 zur `F33f`_`[parallelen Datenverarbeitung`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Parallele_Programmierung]`_`f, die von Robert Numrich und John Reid in den 1990er Jahren entwickelt wurde. Der Fortran-Standard unterstützt Coarrays (jetzt ohne Bindestrich) seit Fortran 2008 (ISO/IEC 1539-1:2010), wie es auf dem May-2005-Treffen des ISO Fortran Komitees beschlossen wurde; die Syntax im Fortran 2008 Standard unterscheidet sich leicht vom ursprünglichen CAF-Vorschlag.
Ein Coarray-Fortran-Programm wird so interpretiert, als ob es `*n`*-mal `F33f`_`[repliziert`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Replikation_(Datenverarbeitung)]`_`f würde und alle Kopien asynchron ausgeführt würden. Jede Kopie hat ihre eigenen Datenobjekte und wird Bild („image“) genannt. Die `F33f`_`[Feld`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Feld_(Datentyp)]`_`f-Syntax von Fortran wird erweitert um rechteckige Klammern, die den Bildindex enthalten, mit dem man so auf die Daten eines anderen Bildes (Prozesses) zugreifen kann.
Die Co-array-Fortran-Erweiterung gibt es schon seit den 1990ern und sie wird in einigen Fortrancompilern wie zum Beispiel dem von `F33f`_`[Cray`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Cray]`_`f (ab Version 3.1) unterstützt. Seitdem Coarrays Teil von Fortran 2008 sind, nimmt die Anzahl der Implementation zu; der erste `F33f`_`[Open-Source`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Open_Source]`_`f-`F33f`_`[Compiler`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Compiler]`_`f, der Coarrays gemäß dem Fortran-2008-Standard unterstützt, ist `F33f`_`[G95`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=G95]`_`f.
>>Contents
• `F0af`_`[Beispiel`#beispiel]`_`f
• `F0af`_`[Siehe auch`#siehe-auch]`_`f
• `F0af`_`[Weblinks`#weblinks]`_`f
-─
>>Beispiel
`B100`F9d9program Hallo_Welt`f`b
`B100`F9d9 implicit none`f`b
`B100`F9d9 integer :: i ! Lokale Variable`f`b
`B100`F9d9 character(len=20) :: name[*] ! skalares Coarray`f`b
`B100`F9d9 ! Hinweis: "name" ist die lokale Variable wohingegen "name[<index>]"`f`b
`B100`F9d9 ! auf die Variable eines anderen Prozesses (Image) zugreift`f`b
`B100`F9d9`f`b
`B100`F9d9 ! Kommuniziere mit dem Nutzer auf Image 1`f`b
`B100`F9d9 if (this_image() == 1) then`f`b
`B100`F9d9 write(*,'(a)',advance='no') 'Geben Sie Ihren Namen ein: '`f`b
`B100`F9d9 read(*,'(a)') name`f`b
`B100`F9d9`f`b
`B100`F9d9 ! Verteile die Information an die anderen Prozesse`f`b
`B100`F9d9 do i = 2, num_images()`f`b
`B100`F9d9 name[i] = name`f`b
`B100`F9d9 end do`f`b
`B100`F9d9 end if`f`b
`B100`F9d9`f`b
`B100`F9d9 sync all ! Barriere damit die Daten wirklich da sind`f`b
`B100`F9d9`f`b
`B100`F9d9 ! Ein-/Ausgabe von allen Prozessen`f`b
`B100`F9d9 write(*,'(3a,i0)') 'Hallo ',trim(name),' von Image ', this_image()`f`b
`B100`F9d9end program Hallo_Welt`f`b
>>Siehe auch
• `F33f`_`[Unified Parallel C`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Unified_Parallel_C]`_`f
• `F33f`_`[Parallele Programmierung`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Parallele_Programmierung]`_`f
• `F33f`_`[Partitioned Global Address Space`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Partitioned_Global_Address_Space]`_`f
>>Weblinks
• ISO Fortran Committee
• Coarrays in the next Fortran Standard (PDF)
• Rationale for Co-Arrays in Fortran 2008 (PDF)
`c`F0af`_`[↑ Back to top`#top]`_`f`a